////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) Microsoft Corporation.  All rights reserved.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef _DRIVERS_PAL_I2C_H_
#define _DRIVERS_PAL_I2C_H_

//--//

#include "Tinyhal.h"
#include "AsyncprocCalls_decl.h"

struct I2C_Driver
{
    HAL_DblLinkedList<HAL_CONTINUATION> m_xActions;
    BOOL                                m_initialized;

    //--//

    static BOOL Initialize  ();
    static BOOL Uninitialize();
    static BOOL Enqueue     ( I2C_HAL_XACTION* xAction              );
    static void Cancel      ( I2C_HAL_XACTION* xAction, bool signal );

    //--//

private:
    static void StartNext        (           );
    static void CompletedCallback( void* arg );
};

///////////////////////////////////////////////////////////////////////////////

#endif // _DRIVERS_PAL_I2C_H_
